package com.example.model; // 定义包名，表示该类属于model包

import java.util.Objects; // 导入Objects工具类，用于equals和hashCode方法

/**
 * 用户实体类
 * 对应数据库中的users表
 */
public class User { // 定义公共的User类
    private int id; // 用户ID，对应数据库主键
    private String username; // 用户名，对应数据库username字段
    private String password; // 用户密码，对应数据库password字段
    private String email; // 用户邮箱，对应数据库email字段

    // 默认构造函数
    public User() { // 无参构造函数，用于创建空的User对象
    } // 构造函数结束

    // 带参数的构造函数
    public User(int id, String username, String password, String email) { // 全参构造函数，用于创建完整的User对象
        this.id = id; // 设置用户ID
        this.username = username; // 设置用户名
        this.password = password; // 设置密码
        this.email = email; // 设置邮箱
    } // 构造函数结束

    // 不包含id的构造函数（用于注册新用户）
    public User(String username, String password, String email) { // 不含ID的构造函数，用于新用户注册
        this.username = username; // 设置用户名
        this.password = password; // 设置密码
        this.email = email; // 设置邮箱
    } // 构造函数结束

    // Getter和Setter方法
    public int getId() { // 获取用户ID的公共方法
        return id; // 返回用户ID值
    } // getId方法结束

    public void setId(int id) { // 设置用户ID的公共方法
        this.id = id; // 将传入的id值赋给实例变量
    } // setId方法结束

    public String getUsername() { // 获取用户名的公共方法
        return username; // 返回用户名值
    } // getUsername方法结束

    public void setUsername(String username) { // 设置用户名的公共方法
        this.username = username; // 将传入的username值赋给实例变量
    } // setUsername方法结束

    public String getPassword() { // 获取密码的公共方法
        return password; // 返回密码值
    } // getPassword方法结束

    public void setPassword(String password) { // 设置密码的公共方法
        this.password = password; // 将传入的password值赋给实例变量
    } // setPassword方法结束

    public String getEmail() { // 获取邮箱的公共方法
        return email; // 返回邮箱值
    } // getEmail方法结束

    public void setEmail(String email) { // 设置邮箱的公共方法
        this.email = email; // 将传入的email值赋给实例变量
    } // setEmail方法结束

    @Override // 重写Object类的equals方法
    public boolean equals(Object o) { // 判断两个User对象是否相等的方法
        if (this == o) return true; // 如果是同一个对象引用，直接返回true
        if (o == null || getClass() != o.getClass()) return false; // 如果对象为null或类型不同，返回false
        User user = (User) o; // 将Object类型转换为User类型
        return id == user.id && // 比较ID是否相等
                Objects.equals(username, user.username) && // 比较用户名是否相等
                Objects.equals(password, user.password) && // 比较密码是否相等
                Objects.equals(email, user.email); // 比较邮箱是否相等
    } // equals方法结束

    @Override // 重写Object类的hashCode方法
    public int hashCode() { // 生成对象哈希码的方法
        return Objects.hash(id, username, password, email); // 基于所有字段生成哈希码
    } // hashCode方法结束

    @Override // 重写Object类的toString方法
    public String toString() { // 将对象转换为字符串表示的方法
        return "User{" + // 返回格式化的字符串，包含类名
                "id=" + id + // 拼接ID字段
                ", username='" + username + '\'' + // 拼接用户名字段
                ", password='" + password + '\'' + // 拼接密码字段
                ", email='" + email + '\'' + // 拼接邮箱字段
                '}'; // 结束大括号
    } // toString方法结束
} // User类结束